//
//  ProblemOffer57-2.swift
//  TestProject
//
//  Created by 武侠 on 2022/3/8.
//  Copyright © 2022 zhulong. All rights reserved.
//

import UIKit
/*
 剑指 Offer 57 - II. 和为s的连续正数序列 ✅
 输入一个正整数 target ，输出所有和为 target 的连续正整数序列（至少含有两个数）。
 序列内的数字由小到大排列，不同序列按照首个数字从小到大排列。
 示例 1：
     输入：target = 9
     输出：[[2,3,4],[4,5]]
 示例 2：
     输入：target = 15
     输出：[[1,2,3,4,5],[4,5,6],[7,8]]
 限制：
    1 <= target <= 10^5
 */
class ProblemOffer57_2: NSObject {
    /*
     an=a1+n-1
     前n项和公式为：Sn=n*a1+n(n-1)/2
     
     a1 = (Sn - n(n-1)/2)/n
     */
    func findContinuousSequence(_ target: Int) -> [[Int]] {
        var list: [[Int]] = []
        var s: Int = 0, temp: Int = 0, a1 : Int = 0
        for n in (2...(target/2+1)) {
            s = n * (n-1) / 2
            if target <= s {
                continue
            }
            temp = target - s
            if temp % n == 0 {
                a1 = temp / n
                list.append([Int](a1...a1+n))
            }
        }
        return list.reversed()
    }
}
